<html>
<head>
<title>TableFilter - license and download</title>
<link rel="stylesheet" type="text/css" href="tablefilter.css">
</head>
<body><div id='content'>
  <ul>
    <li><a href="#download">Download</a></li>
    <li><a href="#license">License</a></li>
    <li><a href="#history">History</a></li>
    <li><a href="#support">Support, issues, forums</a></li>
  </ul>

  <h1><a name="download">Download</a></h1>
  
    <p>
      <span class="mark">TableFilter</span> is open source, under 
      <a href='#license'>MIT license</a>. Its latest version, 5.1.1, has been
      released the 29th June 2013. The changelog is available 
      <a href='#history'>below</a>
    </p>
    
    <ul>
    	<li><span class='mark'>Sources</span>:
	       	<ul>
	       		<li>Available at Google Code, as the project 
	       			<a href='http://code.google.com/p/tablefilter-swing/'>tablefilter-swing</a></li>
	   			<li>Alternatively, they can be downloaded directly as a
	   				single zip file:<a href='download/tablefilter-src-v5.1.1.zip'>tablefilter-src-v5.1.1.zip</a></li>
	   			<li>The last Java 5 release was bundled on release 4.5.0: <a href='download/tablefilter-src-v4.5.0.zip'>tablefilter-src-v4.5.0.zip</a></li>
	       	</ul>
       	</li>
    	<li><span class='mark'>Binaries</span>:
	    	<ul>
	    		<li>The binaries are included in the
	   	  			<a href='http://repo2.maven.org/maven2/net/coderazzi/'>central maven
	   	  			repository</a>. This means that, on a maven project, it can be used by
	   	  			adding the dependency to 
	   	  			<span class='mark'>net.coderazzi.tablefilter-swing</span>, or to
	   	  			<span class='mark'>net.coderazzi.tablefilter-swing-java5</span>, if 
	   	  			the version with support for Java 5 is needed.
	    		</li>
	    		<li>Outside a maven project, the binaries, (together with sources and 
			   		javadoc) can be downloaded directly from the maven repository. The
			   		last versions are hosted at:
			   		<ul>
			   		 <li><a href='http://repo2.maven.org/maven2/net/coderazzi/tablefilter-swing/5.1.1/'>
			   		 	Version 5.1.1</a></li> 
			   		 <li><a href='http://repo2.maven.org/maven2/net/coderazzi/tablefilter-swing-java5/4.5.0/'>
			   		 	Version 4.5.0 for Java 5</a></li> 
				    </ul>
	    		</li>
	    	</ul>
    	</li> 
    	<li>All versions are available in source/binary form on this <a href='download'>folder</a>.</li>
    </ul>
    
    

  <h2><a name="license">License</a></h2>

    <p>
      <span class="mark">TableFilter</span> is available under the 
      <a href="http://www.opensource.org/licenses/mit-license.php">MIT</a> 
      license.
    </p>

    <pre>Copyright (c) 2007 Luis M. Pena  - lu@coderazzi.net

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.</pre>

     <p>
       The source distribution contains, in addition to the 
      library's source code, some tests. These tests make usage of
      a general icon library (FamFamFam), and, in case of the Java 1.5 
      version, of a open source class called TableSorter.java, which 
      retains the original copyright.
    </p>
    
    <p>
      As of version 1.2.0, there are also icons in the library, to facilitate
      its usage under Gui editors. These icons come from the 
      <a href="http://www.famfamfam.com/lab/icons/silk/">FamFamFam</a> silk icon library, 
      licensed under a
      <a href="http://creativecommons.org/licenses/by/2.5/">Creative Commons Attribution 2.5 License</a>.
    </p>

  <h2><a name="history">History</a></h2>
  
    <h3>Version 5.1.1 ( 29th June 2013 )</h3>
    
    	<p>This is a very minor release, although it affects to the global API: it solves
    	<a href='http://code.google.com/p/tablefilter-swing/issues/detail?id=33'>issue 33</a>:
    	not possible to turn off auto-selection at filter header level.</p>

    <h3>Version 5.0.0 ( 12th March 2013 )</h3>
    
    	<p>Stopped the development of the release compatible with Java 5. Note that Java 5
    	entered its end-of-life on April 8, 2008 and is no longer supported as of November 3, 2009.</p>
    	
    	<p>Solved <a href='http://code.google.com/p/tablefilter-swing/issues/detail?id=31'>issue 31</a>:
    	setComparator did not refresh PopUp. In previous releases, choices in the filter
    	editors were displayed alphabetically sorted. With this release,
    	choices are sorted with the registered comparator for the given class / editor.</p>

    	<p>Solved <a href='http://code.google.com/p/tablefilter-swing/issues/detail?id=32'>issue 32</a>:
    	allow different sorting on choices box. A new method is included on
    	the IFilterEditor interface -setChoicesOperator- that the user can
    	invoke to change the sort operator. In special, by invoking this 
    	method with a null operator, the user can return to the original
    	behaviour -sort choices alphabetically-</p>

    <h3>Version 4.5.0 ( 17th November 2012 )</h3>
    
    	<p>Extended TableFilterHeader constructors, to enable setting up 
    	directly the AutoChoices mode.</p>

    	<p>Solved <a href='http://code.google.com/p/tablefilter-swing/issues/detail?id=28'>issue 28</a>:
    	Cells with HTML &lt;img&gt; tags do not appear in filter choices. This issue is solved
    	by creating a new ChoiceRenderer, the HtmlChoiceRenderer, that must
    	be explicitly set on that column.</p> 

    	<p>Provided additional documentation, to cover 
    	<a href='http://code.google.com/p/tablefilter-swing/issues/detail?id=29'>issue 29</a>,
    	on the method to remove a filter header.</p>

    	<p>Included new example on the distribution.</p>

    <h3>Version 4.4.1 ( 2nd September 2012 )</h3>

    	<p>Solved <a href='http://code.google.com/p/tablefilter-swing/issues/detail?id=25'>issue 25</a>,
    	where the library would not use the background / foreground colors provided by CustomChoice
    	instances.</p> 
    
    	<p>Solved <a href='http://code.google.com/p/tablefilter-swing/issues/detail?id=26'>issue 26</a>:
    	if one CustomChoice' text representation was a substring (from the beginning) of
    	other CustomChoice's representation, selecting the shorter CustomChoice
    	would filter out all rows in the table.</p>
    	
    	<p>Improved the performance of the library; an internal bug implied that any 
    	filter applied on the table would be evaluated up to 3 times.</p>

    <h3>Version 4.4.0 ( 23rd August 2012 )</h3>

    	<p>Extended the IFilterEditor interface with two new methods to handle the history
    	  on each editor: getHistory / setHistory. These methods allow the user to
    	  add custom functionality to preserve the status of the headers across runs.
    	  In addition, the CustomChoice class implements now the Serializable
    	  interface, and all the CustomChoice implementations in the library
    	  can be now safely serialized.</p>
    
    	<p>Solved <a href='http://code.google.com/p/tablefilter-swing/issues/detail?id=24'>issue 24</a>,
    	which adds a check to avoid a rare exception occurrence.</p>

    <h3>Version 4.3.0 ( 17th January 2012 )</h3>
    
    	<p>Solved <a href='http://code.google.com/p/tablefilter-swing/issues/detail?id=22'>issue 22</a>,
    	related to CustomChoices not working with wildcards. Its implementation has had impact
    	on the CustomChoice interface, extended with several setters.</p>

    	<p>Solved minor bug related to parsing expressions. If the expression started with
    	an operand (such as &gt;), some inner spaces could be removed from the
    	expression.</p>
    	
    	<p>Solved <a href='http://code.google.com/p/tablefilter-swing/issues/detail?id=23'>issue 23</a>;
    	the table filter library would not handle properly tables with HTML content. The filter
    	editor choices would be rendered incorrectly and the filtering would not work in many cases.</p>
    	       
    <h3>Version 4.2.0 ( 15th November 2011 )</h3>
    
    	<p>Extended the IFilterEditor interface with two new methods to
    	handle the user interaction with the editor; the added functionality,
    	as requested <a href='http://code.google.com/p/tablefilter-swing/issues/detail?id=19'>-issue 19-</a>,
    	allows the programmer to disable the interaction with the editor 
    	without disabling the filter set.</p>
    
    	<p>Solved <a href='http://code.google.com/p/tablefilter-swing/issues/detail?id=16'>issue 16</a>,
    	related to missing custom choices on enumeration columns.</p>

    	<p>Solved <a href='http://code.google.com/p/tablefilter-swing/issues/detail?id=20'>issue 20</a>,
    	to properly filter content with embedded newlines.</p>
    	
    	<p>Solved <a href='http://code.google.com/p/tablefilter-swing/issues/detail?id=21'>issue 21</a>,
    	a bug associated to instant filtering.</p>
    	       
    <h3>Version 4.1.4 ( 26th May 2011 )</h3>
    
    	<p>Solved <a href='http://code.google.com/p/tablefilter-swing/issues/detail?id=15'>issue 15</a>,
    	where exceptions are raised when the user selects a choice in the 
    	filter editor's combobox if a Format class is associated to that 
    	editor.</p>

    	<p>Extended the CustomChoice class with several static methods to
    	facilitate the creation of CustomChoice instances.</p>
    	
       
    <h3>Version 4.1.3 ( 7th April 2011 )</h3>
    
    	<p>Solved inconsistency on filter expressions containing spaces or tabs:
    	spaces on any side of the filter expression are now dismissed; 
    	side spaces on the table contents are likewise dismissed. Note that
    	this was already the behaviour on previous releases (before 4.1.x).</p>
       
    	<p>Solved <a href='http://code.google.com/p/tablefilter-swing/issues/detail?id=13'>issue 13</a>
    	that would cause a null pointer exception when pasting a string with 
    	embedded new lines on a filter editor.</p>
    	
    	<p>Bug solved: a choice selection -from the editor popup- caused no
    	changes on the editor history -shown on the very same popup-.</p>
    	
    	<p>Bug solved: the editor popup is displayed below its editor, but, if
    	the editor position or size changed the popup would only change its
    	position and size when reopened.</p> 
  			
    	<p>Solved <a href='http://code.google.com/p/tablefilter-swing/issues/detail?id=14'>issue 14</a>
    	where the usage of AutoChoices.ENUMS was inconsistent or wrong.</p>
    	
    <h3>Version 4.1.2 ( 23rd March 2011 )</h3>
       
    	<p>Solved bug where enabled adaptive choices cause 
    	ArrayIndexOutOfBoundsException when table model is changed: see
    	<a href='http://code.google.com/p/tablefilter-swing/issues/detail?id=8'>issue</a>.</p>
  			
    	<p>Solved bug on slow progress with instant filtering + adaptive choices, 
    	resulting in performance degradation: see
    	<a href='http://code.google.com/p/tablefilter-swing/issues/detail?id=11'>issue</a>.</p>

    	<p>Solved bug where wildcard expressions, if case insensitive, fail on
    	Unicode characters: see
    	<a href='http://code.google.com/p/tablefilter-swing/issues/detail?id=12'>issue</a>.</p>
    	
    	<p>Collators comparisons have been removed from the library: 
		collators were never used on regular expressions
 		or wildcard expressions, resulting in inconsistent behaviour.</p>
 		
		<p>Added document on library's performance.</p> 		
  			
    <h3>Version 4.1.1 ( 15th March 2011 ) </h3>
       
    	<p>Solved bug: previous version would fail to set the content on a
    	non editable filter editor if invoked before the editor' choices were 
    	made available.</p>
    	
    	<p>Source reformatted.</p>

    <h3>Version 4.1.0 ( 14th March 2011 ) </h3>
       
    	<p><span class='mark'>Instant filtering</span>: filtering happens as
    	the user inputs text; implemented after 
    	<a href='http://code.google.com/p/tablefilter-swing/issues/detail?id=4'>requirement</a>.</p>
  			
    	<p><span class='mark'>Auto completion</span> on editable filter editors: 
    	So far was only provided, and required, for non editable
   		editors. Now, it can be setup (it is by default) on editable editors.</p>
  			
    	<p><span class='mark'>Warning feedback color</span>: 
    	added special color to signal that the filters are hiding the table's 
    	rows. This functionality is not available on the Java 5 version.</p>
  			
    	<p>Added method
    	<a href='api/net/coderazzi/filters/gui/TableFilterHeader.html#setFilterOnUpdates(boolean)'>setFilterOnUpdates</a>
    	 to trigger or not filter updates when the underlying table model changes. 
    	 Not available on the Java5 version.</p>
    	 
    	<p>Possibility to define the height of a filter row (by delta over the
    	default value), functionality implemented after 
    	<a href='http://code.google.com/p/tablefilter-swing/issues/detail?id=2'>requirement</a>.</p>
  			
    	<p>Solved bug where the model is added after attaching the filter header: see
    	<a href='http://code.google.com/p/tablefilter-swing/issues/detail?id=7'>issue</a>.</p>
  			
    	<p>Solved bug where autochoices on booleans or enums would be incomplete</p>

    	<p>Solved bug on adaptive choices: updating the table would not correctly setup the choices of editors with filters</p>
  			
  	</h3>
  
    <h3>Version 4.0.0 ( 16th February 2011 ) </h3>
       
    	<p>The version 4.x presents, mostly, the same GUI as on version 3.1. 
  			However, there are many changes under the hood, and the library API
  			presents many incompatibilities with respect to previous versions.</p>
  
		<p>Although most changes relate to new functionality, the
			old API is also impacted. The most basic changes breaking compatibility 
			are:</p>
  
		<ul>
			<li>The <span class='mark'>net.coderazzi.filters.gui.editor.FilterEditor</span> 
			class is not accessible anymore, replaced by the interface  
			<span class='mark'>net.coderazzi.filters.gui.IFilterEditor</span>.</li>
			
			<li>The <span class='mark'>AutoOptions</span> mode, a boolean in version
			3.x is now an enumeration, renamed as AutoChoices</li> 
			
			<li>The class <span class='mark'>net.coderazzi.filters.UserFilter</span> 
			has been removed, with its functionality directly included in the 
			<span class='mark'>net.coderazzi.filters.Filter</span> implementation.</li>
			
			<li><span class='mark'>setIgnoreCase</span> cannot be invoked any longer
			on the FilterTextParser (which has been renamed as 
			<span class='mark'>Parser</span>), but on the associated model, 
			represented by the interface  
			<span class='mark'>net.coderazzi.filters.gui.IParserModel</span>		 
		</ul>
  
		<p>In addition to the removal of some bugs, the changes on 4.x have focused
		on the choices shown to the user on each filter editor:</p>
		<ul>
		  <li><span class='mark'>Adaptive choices</span>: the choices provided on
		  each filter editor are modified automatically when the user applies
		  changes on other filters in the same table. Only the choices that are
		  not excluded by the other filters are shown to the user. Note that this
		  behavior, enabled by default, can be disabled.</li>
		  
		  <li><span class='mark'>Custom choices</span>: it is possible to specify
		  custom choices on any filter editor. A custom choice defines its own
		  filter and its appearance.</li>
		  
		  <li><span class='mark'>Auto choices</span>: in version 3.x, when AutoOptions
		  was enabled, the removal of elements in the table was not translated into
		  the filter editor' choices. That is: choices no longer available in the 
		  table were not removed from the filter editor.</li>
		  
		  <li>Proper handling of null values in the table. A custom choice is now
		  presented to the user to select all null or empty values.</li>
		  
		</ul>

		<p>The changes have also tried to make the whole API more consistent and
		  homogeneous. For example, the previous class 
		  <span class='mark'>FilterTextParser</span>
		  and its interface have been replaced by the classes   
		  <span class='mark'>ParserModel</span> and
		  <span class='mark'>Parser</span>, together with its own interfaces, and it
		  is this <span class='mark'>ParserModel</span> where most generic parsing
		  structures must be set, including case ignoring, string formatters and
		  comparators.</p>
		  
    <h3>Version 3.1.2 ( 24th May 2010 ) </h3>
    	<ul>
    		<li>
    		    Solved bug: ignore case not properly handled in the options
    		    displayed in the list inside a filter. Additionally, the
    		    autocompletion would provide incorrect proposals on ignore case
    		    scenarios.     			
    		</li>
		</ul>

    <h3>Version 3.1.1 ( 13th May 2010 ) </h3>
    	<ul>
    		<li>
    		    Solved bug: autoOptions / autoSelection not propagated
    		    properly from the FilterSettings.     			
    		</li>
    		<li>
    			Updated example to use autoOptions by default.    			
    		</li>
		</ul>

    <h3>Version 3.1.0 ( 10th May 2010 ) </h3>
    	<ul>
    		<li>
    			There are no code changes from 3.0.1; this release was required due to the
    			mavenization of the project. It is now available directly from the
    			central maven repositories.    			
    		</li>
		</ul>

    <h3>Version 3.0.1 ( 5th May 2010 ) </h3>
    	<ul>
    		<li>
    			The filter's background and foreground colors can be defined directly in
    			the <a href="api/net/coderazzi/filters/gui/FilterSettings.html">FilterSettings</a> 
    			class.    			
    		</li>
    		<li>
    			The header's background color is not defined anymore as the table's header, but
    		    averaged with the table's background. In some platforms, the look is much nicer.
    		</li>
    		<li>
    		    The arrow to show the popup looks now the same if the filter is disabled or
    		    if the popup cannot be shown -because there is no entries to show-.    		    
    		</li>
    		<li>
    		    The arrow to show the popup is now placed shifted to the bottom.   		    
    		</li>
    		<li>
    			Integrated Types's parser 
    			into the <a href="api/net/coderazzi/filters/gui/FilterSettings.html#types">FilterSettings</a>
    			class.    			
    		</li>
    		<li>
    		    Solved error comparing dates.   		    
    		</li>
    		<li>
    		    Solved error where the focus would remain on the editor, even if disabled.   		    
    		</li>
    		<li>
    		    Whole build process has moved to <a href='http://ant.apache.org/'>ant</a> 		    
    		</li>
		</ul>

    <h3>Version 3.0.0 ( 28th April 2010 ) </h3>
    	<ul>
    		<li>
    			Version 3.0.0 is a major rewriting of the library. It is mostly focused to the Gui, 
    			but it affects to many internal aspects. In general, it should be much simpler 
    			using the library, for the programmer and for the user. The major changes are 
    			listed below.
    		</li>
    		<li>
    			<span class='mark'>Look and feel</span><br>
    			Previous versions of TableFilter could look -depending on the platform and look and feel-, like:
    			
    			<img src="images/old-a.png" class="centered">
    			
    			The inconsistencies would appear when the user mixed different types of editors 
    			on the same header. The most usual headers were implemented using combo boxes, 
    			which could be editable or not. As far as the platform would show both kind of 
    			editors in a similar way, the appearance was fine. 
    			In Windows XP, for example, both look almost the same, although the background 
    			is different; but on Os X, it would look as bad as:
    			
    			<img src="images/old-b.png" class="centered">
    			
    			Even if the user didn't mix editor types, the editable combo box looks here 
    			pretty bad (is the age and male columns in the figure).
    			<br>The new version solves these inconsistencies by implementing its own 
    			editor component, looking as:
    			
    			<img src="images/version3.png" class="centered">
    			
    			Where there were before 4 types of editors -plus any custom creation by 
    			the user-, there is now only one, covering the whole functionality provided 
    			before by the 4 types:
    			<ul>
				  <li>Each editor has its own history, which can be disabled.</li>
				  <li>In addition to historic items, it is possible to specify options for each editor, or even
				      obtaining these options automatically from the table's content.</li>
				  <li>The editor's content can be edited, and autocompletion is built-in.</li>
				  <li>An editor can be defined as non editable. In this case, the input can only match one of
				      the existing options.</li>
				  <li>The editor's content can use custom renderers, like in the following figure.</li>
			   </ul>
			   
			   <img src="images/version3-b.png" class="centered">
  
			  There is no need anymore of casting editor types to use the functionality associated to
			  each type of editor. There is a disadvantage: users cannot define anymore their own editor
			  components. 
    		</li>
    		<li>
    			<span class='mark'>Custom types</span><br>
    			
    			Previous versions required the usage of the interface 
				  <span class='mark'>net.coderazzi.filters.parser.ITypeBuilder</span>
				  to handle non primitive types, including Dates. Its only method, 
				  <span class='mark'>parse</span>, would produce an Object
				  from a String, very much as the standard <span class='mark'>java.text.Format</span> class does.
				  While writing the new version, I uncovered some errors on the initial implementation,
				  realizing that the filtering requires, not only parsing provided text, but also to format
				  objects into Strings.
  
			  <br>What this means is that the <span class='mark'>net.coderazzi.filters.parser.ITypeBuilder</span>
			  type is now gone, replaced by usage of <span class='mark'>java.text.Format</span> instances.
    		</li>
    		<li>
    			<span class='mark'>Filter parser</span><br>
			
			  The original version of TableFilter allowed the definition of complex expressions. For 
			  example, for a table having a column called age and other called name, the user could enter
			  an expression such as:
			  
			   <pre>age &gt; 25 & age &lt; 30 & name ~ Fred*</pre>
			   
			   This is very convenient, even if it could be misleading: the previous expression could be
			   entered on any column, not just on the age or name columns. But the main problem is that the
			   parser was not very configurable, defined quite exotic operators, 
			   and included some obvious errors -using of spaces, for example,
			   would normally lead to problems-.
			   
			   <br>In version 3.0, the distributed parser only allows basic filtering expressions, without 
			   variable names. The original parser could still work -the interface is mostly the same-, but
			   I have preferred to discontinue it. If it were still needed, I will favor implementing a
			   correct parser instead.
			   
			   <br>And, of course, the user can still use its own parser, as the interface has only slightly
			   changed.
       		</li>
    	</ul>

    <h3>Version 2.2.0 ( 12th April 2010 ) </h3>
      <ul>
       <li>
	       This version reintroduces compatibility with Java 5, temporarily excluded on version 2.1, 
	       although not all features are available in the old Java version; more specifically, autoselection
	       will not be supported under Java 5. In addition, many tests for the Java 5 version have been 
	       rewritten, as they contained important bugs
	   </li>
       <li>
	       Concerning Java 6, this release solves a minor bug, as not all resources would be released
	       when a new table model was applied to a table filter.               
	   </li>
      </ul>

    <h3>Version 2.1.2 ( 26th January 2010 ) </h3>
       <ul>
       <li>
	       Added a new singleton instance to facilitate updating the default settings
	       of the library (what can be achieved, anyway, using system properties).
       </li>
       
       <li>
	       Added an autoselection mode, enabled by default. If the current filtering
	       filters out all rows in the table but one, that row become automatically selected.
	       Likewise, selected rows are automatically de-selected when they are filtered out
	       (this is the usual operation mode in the Java 6 table sorter)
       </li>
       
       <li>
	       Modified the default behaviour of the filters, to use wildcard expressions when
	       the user does not specify any operator.
       </li>
       
       <li>
	       All the filter editor constructors where the filter position (table's column)
	       was specified, are now deprecated.
       </li>
       
       <li>
	       Solved bugs related to setting the header visible or hidden, and enabled or disabled
       </li>
      
       <li>
	       Added new Position type NONE, to ensure that the header is not automatically
	       placed -if that is so required-.
       </li>
     </ul>
      

    <h3>Version 2.0.1 ( 13th November 2009 ) </h3>
     <ul>
       <li>
	       This version is limited to defining properly the properties that
	       define the default behaviour. Although already partially included in
	       version 2.0.0, the inclusion was not complete and buggy in the case of
	       some of these properties.<br>
	       The full list of system properties that can be defined to override
	       the default TableFilter behavior is listed <a href='tutorial.html#settings'>here</a>.
       </li>
       <li>
	       A new <a href='examples.html#AppTestProperties'>example</a> is provided to test the extended behaviour.
       </li>
     </ul>

    <h3>Version 2.0.0 ( 1st September 2009 ) </h3>
      <ul>
       <li>
       This version extends some public interfaces, adding functionality. However,
       it means that users that implemented their own table filter editors or text parsers 
       must now implement
       the new interfaces, so the compatibility is broken. Most users uniquely use the existing
       table filter editors and parsers, and will not face any compatibiliy issues:
       <ul>	
	        <li>
		        Changed interface on 
		        <a href="api/net/coderazzi/filters/gui/IFilterEditor.html">ITableFilterEditor</a>
		        <ul>
		            <li>It is possible to retrieve the applied filter on any table's column</li>
		            <li>It is also possible to set dynamically the filter on any column</li>
		            <li>Its is supported, through the use of the new 
		            <a href="api/net/coderazzi/filters/gui/IFilterHeaderObserver.html">ITableFilterEditorObserver</a>
		            interface, to be notified of changes on the filter's editor.</li>
		        </ul>
	        </li>
	        <li>
		        Changed interface on IFilterTextParser</a>,
		        including two methods already defined in the generic implementation in FilterTextParser</a>:
		        <ul>
		            <li>Define a type builder for specific user types.</li>
		            <li>Define a comparator for any type.</li>
		        </ul>
	        </li>
	        <li>
		        Added interface on 
		        <a href="api/net/coderazzi/filters/gui/IFilterHeaderObserver.html">ITableFilterHeaderObserver</a>,
		        to observe events on the <a href="api/net/coderazzi/filters/gui/TableFilterHeader.html">TableFilterHeader</a>.
	        </li>
	        <li>
	        	Dates are now <a href='tutorial.html#types'>automatically handled</a> in the library.
	    	</li>
	        <li>
		        The user can provide properties that override some default behaviours. These properties
		        have been later redefined in 2.0.1.
	        </li>
	        <li>
		        Bug solved: usage of renderers on TableChoiceFilterEditor</a> 
		        would likely drive to AWT exceptions.
	        </li>
	        <li>
		        Bug solved: changing the table or the model, using the TableChoiceFilterEditor</a>
		        on a column with boolean or enumeration types, would hide all the elements, as if they would not
		        validate the filter -even if empty-
	        </li>
	        <li>
	        	UserFilters are automatically enabled
	    	</li>
	        <li>
		        Extended examples to show how to listen for events on the table editors
	        </li>
       </ul>
       </li>
      </ul>

    <h3>Version 1.5.0 ( 7th August 2009 ) </h3>
      <ul>
       <li>Changes; this release improves on the usage of the TableChoiceFilterEditor</a>,
          that is, the editor filter that offers the user a list of the different options
          as found in the table model:
       <ul>

        <li>The choices are automatically updated when new entries are included in the table.
        That is, new values are added to the filter's choices; however, old values, that
        are removed or replaced out of the table model, are not removed from the filter's choices.
        </li>
        <li>In addition, the comparator function used to set the order among the choices in
        the editor, is replaced, to use automatically the comparison method supplied on
        <a href="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html">Comparable classes</a>
         (if supplied, that is)</li>
       </ul>
      </li></ul>

  	<h3>Version 1.4.1 ( 4th July 2009 ) </h3>
      <ul>
       <li>Changes:
       <ul>
       	<li>Bug solution: in specific conditions, the header would fail to display.</li>
       	<li>Bug solution: filters could be added to the default TableFilterHeader, but it would be needed to
       	invoke reportFilterUpdatedToObservers(), a protected method: therefore, clients had to be defined
       	as separate classes. Adding now a user filter triggers automatically the report method.</li>
       	<li>Added commodity class UserFilter to create external filters.</li>
       	<li>Added serialization ids to all serializable classes.</li>
       </ul>
      </li></ul>

  	<h3>Version 1.4.0 ( 10th June 2009 ) </h3>
      <ul>
       
       <li>Changes:
       <ul>
       	<li>The whole namespace is migrated from byteslooser.com to coderazzi.net</li>
       	<li>Removing Java compilations warnings from source.</li>
       </ul>
      </li></ul>

  	<h3>Version 1.3.0 ( 17th February 2009 ) </h3>
      <ul>
       <li>Changes:
       <ul>
       	<li>Automatic layout management for the filter header.
	       	On previous versions, the user had to place manually the header in the Gui container, 
	      while now is is enough to instantiate the header and set the associated table: 
		    <pre>TableFilterHeader filterHeader = new TableFilterHeader(table);</pre>
        </li>
        <li>
	      Version 1.3.0 keeps backwards compatibility: if the 
	      <a href="api/net/coderazzi/filters/gui/TableFilterHeader.html">TableFilterHeader</a>
	      is explicitely included in some Gui container, the default behaviour to 
	      automatically setup the filter header close by the table header is deactivated.
        </li>
       </ul>
      </li></ul>

    
  <h2><a name="support">Support, issues, forums</a></h2>

    <p>
      Issues, or bugs, can be reported at the 
      <a href='http://code.google.com/p/tablefilter-swing/issues/list'>Google Code</a>
      host site.
    </p>
    <p>
      Discussions can be carried at the associated 
      <a href='http://groups.google.com/group/tablefilter-swing'>Google group</a>
      forum.
    </p>
    <p>
      Would you require commercial support on this library, or specific 
      customizations, please contact <b><i>lu@coderazzi.net</i></b>
    </p>

 </div>
</body>
</html>
